﻿#define _CRT_SECURE_NO_WARNINGS


//自定义函数的简单实现

//写⼀个加法函数，完成2个整型变量的加法操作。

#include<stdio.h>
int ADD(int x, int y)
{
	int z = 0;
	z = x + y;
	return z;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int c = ADD(a, b);
	printf("%d\n", c);
	return 0;
}

//ADD(自定义函数的简化)


#include<stdio.h>
int ADD(int x, int y)
{
	return x + y;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int c = ADD(a, b);
	printf("%d\n", c);
	return 0;
}


//返回值为空的情况
//写一个函数，打印“hello”


#include<stdio.h>
void print(void)
{
	printf("hello\n");
}
int main()
{
	print();
	return 0;
}

//多个自定义函数的实现
//将两个数值的加法和值的打印都用函数实现

#include<stdio.h>
int ADD(int x, int y)
{
	return x + y;
}
void print(int z)
{
	printf("%d",z);
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int c = ADD(a, b);
	print(c);
	return 0;
}

//关于return的一些注意

// return后边可以是⼀个数值，也可以是⼀个表达式，如果是表达式则先执⾏表达式，再返回表达式的结果。（即上面函数的展开写法和简化写法的区别）

// return后边也可以什么都没有，直接写 return; 这种写法适合函数返回类型是void的情况。（就比如上面的printf，其就不需要值的返回）

// return返回的值和函数返回类型不⼀致，系统会⾃动将返回的值隐式转换为函数的返回类型。（即定义自定义函数的类型优先，这里会涉及到强制类型转换，但会损失数据）

// return语句执⾏后，函数就彻底返回，后边的代码不再执⾏。（类似于break在判断语句中的效果）

// 如果函数中存在if等分⽀的语句，则要保证每种情况下（每一个分支结束）都有return返回，否则会出现编译错误。